//
//  ViewController.m
//  NSURLConnection
//
//  Created by apple on 15/9/5.
//  Copyright (c) 2015年 戴维营. All rights reserved.
//

#import "ViewController.h"

@interface ViewController () <NSURLConnectionDataDelegate>


{
    NSMutableData *_data;
    
    NSInteger _expectedLength;

}
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
//    NSURLConnection :可以向服务器发送http请求，是对CFNetwork的封装；


#if 0  //方法是简单，但是一般只适用于数据量比较小的场景，－－－－>一般超过个1M就不会用这种方法了;
    
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]];
    
//    发送异步请求；
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError)
    {
        NSLog(@"%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
    }];

#endif
    

#if 1
    
//    NSURLConnection的对象可以对网络请求过程进行控制（开始、暂停等），并且可以通过多个代理方法告知程序当前的请求状态；
    
    
    NSURLConnection *con = [[NSURLConnection alloc] initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://b.hiphotos.baidu.com/image/h%3D200/sign=9bd4ae04f6d3572c79e29bdcba126352/e850352ac65c1038c246372fb6119313b07e8927.jpg"]] delegate:self startImmediately:NO];
    
    [con start];
    
#endif
    
    // Do any additional setup after loading the view, typically from a nib.
}


//接收服务器的响应，（有可能失败）；

//代理方法中的connection参数都是表示上面创建的connection对象；

//1⃣️    判断有么有收到响应；
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
//    由于发送的是http请求，所以接收到的也是http的响应；
    
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
    
//    200:请求成功，还有其他的2xx的状态码表示成功；（很重要）
    if (httpResponse.statusCode == 200)
    {
        
//        创建可变的data，用于存放从服务器上获取的数据；
        _data = [NSMutableData data];
        
//        响应内容的总长度；
        
        _expectedLength = httpResponse.expectedContentLength;
        
        NSLog(@"%@",response);
        
    }
    
}

//2⃣️   响应数据，当数据量较大的时候，会对数据进行分割，通过＊＊＊多次的调用＊＊＊这个方法进行返回；
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
//    多次获取的数据拼接成一个完整的数据；
    
    [_data appendData:data];
    NSLog(@"下载进度：%.2f%%",_data.length * 100.0 / _expectedLength);

}

//3⃣️－－－》下载完成；
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    [_data writeToFile:@"Users/apple/Desktop/abc.jpg" atomically:YES];

}


//4⃣️－－－》请求失败

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSLog(@"%@",error);

}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
